package errorx

import "fmt"

type CodeError struct {
	Code int32    		`json:"code"`
	Msg  string 		`json:"msg"`
}

func (e *CodeError) GetErrCode() int32 {
	return e.Code
}

func (e *CodeError) GetMsg() string {
	return e.Msg
}

func (e *CodeError) Error() string {
	return fmt.Sprintf("code=%d||msg=%s", e.Code, e.Msg)
}

func NewErrCodeMsg(code int32, msg string) *CodeError {
	if len(msg) <= 0 {
		msg = MapErrMsg(code)
	}
	return &CodeError{Code: code, Msg: msg}
}

func NewErrCode(code int32) *CodeError {
	return NewErrCodeMsg(code, "")
}

func NewErrMsg(msg string) *CodeError {
	return NewErrCodeMsg(ERRNO_INTERNAL, fmt.Sprintf("%s:%s",  MapErrMsg(ERRNO_INTERNAL), msg))
}

func NewCodeErr(code int32, err error) *CodeError  {
	codeMsg := MapErrMsg(code)
	if err != nil {
		codeMsg = fmt.Sprintf("%s:%s",  codeMsg, err.Error())
	}

	return NewErrCodeMsg(code, codeMsg)
}